#pragma warning disable 108
using System;
using System.Runtime.InteropServices;
using System.Collections.Generic;
using Cephei;
using Cephei.Core;
using Cephei.Core.Generic;
using Microsoft.FSharp.Core;
using Cephei.QL.Math;
using Cephei.QL;
namespace Cephei.QL.Experimental.Processes
{
    /// <summary> 
	/// ! This class describes the Geman-Roncoroni process governed by \f[ \begin{array}{rcl} dE(t) &=& \left[ \frac{\partial}{\partial t} \mu(t) +\theta_1 \left(\mu(t)-E(t^-)\right)\right]dt +\sigma dW(t) + h(E(t^-))dJ(t) \\ \mu(t)&=& \alpha + \beta t +\gamma \cos(\epsilon+2\pi t) +\delta \cos(\zeta + 4\pi t) \end{array} \f]  \ingroup processes
	/// </summary>
    [Guid ("9679D345-B468-4503-97FA-AA08835622C8"),ComVisible(true)]
	public interface IGemanRoncoroniProcess : Cephei.QL.IStochasticProcess1D
	{
		///////////////////////////////////////////////////////////////
        // Methods
        //
        /// <summary> 
		/// 
		/// </summary>
		 Double Diffusion(Double t, Double x);
        /// <summary> 
		/// 
		/// </summary>
		 Double Drift(Double t, Double x);
        /// <summary> 
		/// 
		/// </summary>
		 Double Evolve(Double t0, Double x0, Double dt, Double dw, Cephei.QL.Math.IArray du);
        /// <summary> 
		/// 
		/// </summary>
		 Double Evolve(Double t0, Double x0, Double dt, Double dw);
        /// <summary> 
		/// 
		/// </summary>
		 Double StdDeviation(Double t0, Double x0, Double dt);
        /// <summary> 
		/// 
		/// </summary>
		 Double X0 {get;}
    }   

    /// <summary> 
	/// ! This class describes the Geman-Roncoroni process governed by \f[ \begin{array}{rcl} dE(t) &=& \left[ \frac{\partial}{\partial t} \mu(t) +\theta_1 \left(\mu(t)-E(t^-)\right)\right]dt +\sigma dW(t) + h(E(t^-))dJ(t) \\ \mu(t)&=& \alpha + \beta t +\gamma \cos(\epsilon+2\pi t) +\delta \cos(\zeta + 4\pi t) \end{array} \f]  \ingroup processes Factory
	/// </summary>
   	[ComVisible(true)]
    public interface IGemanRoncoroniProcess_Factory 
    {
        ///////////////////////////////////////////////////////////////
        // Factory methods
        //
        /// <summary> 
		/// 
		/// </summary>
	    IGemanRoncoroniProcess Create (Double x0, Double alpha, Double beta, Double gamma, Double delta, Double eps, Double zeta, Double d, Double k, Double tau, Double sig2, Double a, Double b, Double theta1, Double theta2, Double theta3, Double psi);
    }
}

